package com.yl.chainStore.entity.pay

import com.alibaba.druid.support.json.JSONUtils
import com.alibaba.fastjson.JSONObject
import com.baomidou.mybatisplus.annotation.IdType
import com.baomidou.mybatisplus.annotation.TableField
import com.baomidou.mybatisplus.annotation.TableId
import com.baomidou.mybatisplus.annotation.TableName
import com.yl.chainStore.common.Constants
import com.yl.chainStore.common.enums.Status
import com.yl.chainStore.common.enums.TypeEnum
import com.yl.chainStore.entity.OtherShow
import com.yl.chainStore.payrule.coupons.CouponsRuleTypeEnum
import com.yl.chainStore.payrule.coupons.CouponsRule
import com.yl.common.annotation.NoArg
import com.yl.common.getContext
import java.math.BigDecimal
import java.math.RoundingMode
import java.util.*

/**
 * <p>
 *  客户所持有的优惠卷
 * </p>
 *
 * @author cxw
 * @since 2021-07-30
 */
@NoArg
@TableName(value = "pay_customer_coupons",autoResultMap = true)
data class PayCustomerCoupons(

	/**
	 * id
	 */
	@TableId(value = "id", type = IdType.AUTO)
	var id: Long = 0,

	/**
	 * 标题
	 */
	@TableField("title")
	var title: String,

	/**
	 * 内容
	 */
	@TableField("content")
	var content: String,


	/**
	 * 优惠卷类型
	 */
	@TableField("type")
	var type: TypeEnum = TypeEnum.CUSTOMER_COUPONS_CASH,

	/**
	 * 优惠卷类型
	 */
	@TableField("rule_type")
	var ruleType: CouponsRuleTypeEnum = CouponsRuleTypeEnum.ORDER_FULL_REDUCTION_RULE,

	/**
	 * 开始时间
	 */
	@TableField("start_time")
	var startTime: Date,

	/**
	 * 结束时间
	 */
	@TableField("end_time")
	var endTime: Date,

	/**
	 * 创建用户id
	 */
	@TableField("create_user_id")
	var createUserId: Long = getContext().userId,

	/**
	 * 数据有效性
	 */
	@TableField("enabled")
	var enabled: Int = 1,

	/**
	 * 公司id
	 */
	@TableField("company_id")
	var companyId: Long = getContext().companyId,

	/**
	 * 分院
	 */
	@TableField("dept_id")
	var deptId: Long? = null,

	/**
	 * 用户id
	 */
	@TableField("customer_id")
	var customerId: Long?,

	/**
	 * 状态
	 */
	@TableField("flag")
	var flag: Status = Status.NEW_ADD,

	/**
	 * 使用订单的id
	 */
	@TableField("order_id")
	var orderId: Long? = null,

	/**
	 * 对应模板id（可能会用到，先存着）
	 */
	@TableField("model_id")
	var modelId: Long,

	/**
	 * 使用时间
	 */
	@TableField("use_time")
	var useTime: Date? = null,

	@TableField("real_discount_money")
	var realDiscountMoney: Long? = null
) : OtherShow() {
	fun getOtherContentObj(): CouponsRule {
		return if (other is Map<*, *>) {
			JSONObject.parseObject(JSONUtils.toJSONString(other), ruleType.clazz)
		} else {
			JSONObject.parseObject(other.toString(), ruleType.clazz)
		}
	}

	@TableField(exist = false)
	val realDiscountMoneyShow: BigDecimal? = null
		get() {
			if (realDiscountMoney != null) {
				return BigDecimal(realDiscountMoney!!.div(Constants.OtherConfig.DISCOUNT_TO_DB_DOUBLE)).setScale(
					2,
					RoundingMode.HALF_UP
				)
			}
			return field
		}
}
